package com.rzcode.coinex.kernel.dao.entity;

import com.baomidou.mybatisplus.annotation.TableName;
import com.rzcode.coinex.kernel.common.enums.CertBizStateEnum;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.time.LocalDateTime;


/**
 * 商家退保申请实体类，用于管理商家提交的退保申请信息。
 */
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@TableName(value = "business_cancel_apply")
public class BusinessCancelApply {

    /**
     * 退保申请的唯一标识符。
     */
    @ApiModelProperty(value = "退保申请ID", example = "1")
    private Long id;

    /**
     * 关联的会员信息。
     */
    @ApiModelProperty(value = "会员信息", required = true)
    private Member member;

    /**
     * 认证商家状态，用于表示申请的当前状态。
     */
    @ApiModelProperty(value = "认证商家状态", example = "PENDING")
    private CertBizStateEnum status;

    /**
     * 保证金记录ID，用于关联具体的保证金信息。
     */
    @ApiModelProperty(value = "保证金记录ID", example = "BID123456")
    private String depositRecordId;

    /**
     * 提交退保申请的时间。
     */
    @ApiModelProperty(value = "申请时间", example = "2023-01-01 12:00:00")
    private LocalDateTime cancelApplyTime;

    /**
     * 处理退保申请的时间。
     */
    @ApiModelProperty(value = "处理时间", example = "2023-01-02 10:00:00")
    private LocalDateTime handleTime;

    /**
     * 退保原因，商家提交的退保理由。
     */
    @ApiModelProperty(value = "退保原因", example = "业务调整，不再需要商家认证。")
    private String reason;

    /**
     * 审核失败的理由，如果申请被拒绝则会填充该字段。
     */
    @ApiModelProperty(value = "审核失败理由", example = "提供的资料不完整。")
    private String detail;

    /**
     * 非持久化字段，用于存储与保证金记录相关的临时信息。
     */
    @ApiModelProperty(value = "保证金记录", hidden = true)
    private DepositRecord depositRecord;
}

